'use strict';

var utils = require('./../utils');
var defaults = require('./../defaults');

/**
 * Transform the data for a request or a response
 *
 * @param {Object|String} data The data to be transformed
 * @param {Array} headers The headers for the request or response
 * @param {Array|Function} fns A single function or Array of functions
 * @returns {*} The resulting transformed data
 */
// 解析并在请求前处理数据
module.exports = function transformData(data, headers, fns) {
    //这里的fns是一个函数数组，在axios自定义的foreach中，如果参数是数组，会让每一项都执行回调函数
    var context = this || defaults;
    /*eslint no-param-reassign:0*/
    utils.forEach(fns, function transform(fn) {
        // 这里最终相当于this被绑定在了context上，将data和headers作为参数执行transfrom中的每一个方法，并返回一个data
        // 这里的fn是函数数组里的每一项
        data = fn.call(context, data, headers);
    });

    return data;
};